/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ve.terminal.modelo;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import ve.terminal.controlador.Sesion;
import ve.terminal.db.MediadorBD;
import ve.terminal.db.TraductorSentencias;
import ve.terminal.excepciones.BaseDeDatosExcepcion;
import ve.terminal.excepciones.ConexionExcepcion;

/**
 *
 * @author Jesus Graterol
 */
public class MConductor {
    
    private long codConductor;
    private String cedula;
    private String nombre;
    private String apellido;
    private String status;
    private String numeroLicencia;
    private Date fechaVencimiento = new Date();
    
    
    /**
     * Configuracion de la base de datos
     * 1.- Nombre de la tabla
     * 2.- Nombres de las columnas
     * 3.- Tipos de datos de las columnas
     * 
     * NOTA: se asume que los campos estan en el mismo orden de la base de datos
     * y que la clave primaria está al principio
     */
    private static String nombreEntidad="conductores";
    private static String[] campos = {"Cod_Conductor","Nume_CI","Nomb_Conductor","Apel_Conductor",
                                      "Status_Conductor","Nume_Licencia","Venc_Licencia"};
    private static int[] tipos = {Sesion.TIPO_DATO_LONG,Sesion.TIPO_DATO_STRING,Sesion.TIPO_DATO_DATE};

    /**
     * Constructor de la clase
     * @param codTipoServicio
     * @param nombre 
     */
    public MConductor(long codConductor, String cedula, String nombre, String apellido,
                      String status, String numeroLicencia, Date fechaVencimiento) {
        this.codConductor = codConductor;
        this.cedula = cedula;
        this.nombre = nombre;
        this.apellido = apellido;
        this.status = status;
        this.numeroLicencia = numeroLicencia;
        this.fechaVencimiento = fechaVencimiento;
    }
    
    /**
     * A partir del código busca en la base de datos el tipo servicio
     * @param codConductores
     * @param cedula
     * @param nombre
     * @param apellido
     * @param status
     * @param numeroLicencia
     * @param fechaVencimiento
     */
    public MConductor(int codConductor) throws ConexionExcepcion, BaseDeDatosExcepcion {
        HashMap campos = new HashMap();
        campos.put(MConductor.campos[0], codConductor);
        String consulta = TraductorSentencias.getSelect(new Vector(), nombreEntidad, campos);
        ResultSet rs = null;
        
        try{
            rs = MediadorBD.realizarConsulta(consulta);
            Vector traduccion = TraductorSentencias.traducirResultado(rs, MConductor.tipos);
            for(int i=0;i<traduccion.size();i++){
                this.codConductor = ((Long)traduccion.elementAt(0)).longValue();
                this.cedula = (String)traduccion.elementAt(1);
                this.nombre = (String)traduccion.elementAt(2);
                this.apellido = (String)traduccion.elementAt(3);
                this.status = (String)traduccion.elementAt(4);
                this.numeroLicencia = (String)traduccion.elementAt(5);
                this.fechaVencimiento = (Date)traduccion.elementAt(6);
            }
            
        } catch(ConexionExcepcion e){
            throw e;
        } catch (BaseDeDatosExcepcion e){
            throw e;
        } finally {
            try {
                rs.close();
            } catch (SQLException ex) {
                Logger.getLogger(MConductor.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public long getCodConductor() {
        return codConductor;
    }
    
    public String getCedula() {
        return cedula;
    }

    public String getNombre() {
        return nombre;
    }
    
    public String getApellido() {
        return apellido;
    }
    
    public String getStatus() {
        return status;
    }
    
    public String getNumeroLicencia() {
        return numeroLicencia;
    }
    
    public Date getFechaVencimiento() {
        return fechaVencimiento;
    }     

    public void setCodConductores(long codConductor) {
        this.codConductor = codConductor;
    }
    
    public void setCedula(String cedula) {
        this.cedula = cedula;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    
    public void setApellido(String apellido) {
        this.apellido = apellido;
    }
    
    public void setStatus(String status) {
        this.status = status;
    }
    
    public void setNumeroLicencia(String numeroLicencia) {
        this.numeroLicencia = numeroLicencia;
    }
    
    public void setFechaVencimiento(Date fechaVencimiento) {
        this.fechaVencimiento = fechaVencimiento;
    }
    
    public static String[] getCampos() {
        return campos;
    }

    public static String getNombreEntidad() {
        return nombreEntidad;
    }

    public static int[] getTipos() {
        return tipos;
    }

    public static void setCampos(String[] campos) {
        MConductor.campos = campos;
    }

    public static void setNombreEntidad(String nombreEntidad) {
        MConductor.nombreEntidad = nombreEntidad;
    }

    public static void setTipos(int[] tipos) {
        MConductor.tipos = tipos;
    }
    
    /**
     * Actualiza el registro en la base de datos
     * @return int numero de filas insertadas
     */
    public int update() throws ConexionExcepcion, BaseDeDatosExcepcion{
        HashMap campos = new HashMap();
        campos.put(MConductor.campos[0], new Long(this.codConductor));
        HashMap set = new HashMap();
        set.put(MConductor.campos[1], this.cedula);
        set.put(MConductor.campos[2], this.nombre);
        set.put(MConductor.campos[3], this.apellido);
        set.put(MConductor.campos[4], this.status);
        set.put(MConductor.campos[5], this.numeroLicencia);
        set.put(MConductor.campos[6], this.fechaVencimiento);
        String sentencia = TraductorSentencias.getUpdate(MConductor.nombreEntidad, set,campos);
        return MediadorBD.realizarSentencia(sentencia);
    }
    
    /**
     * Elimina el registro de la base de datos
     * @return Número de filas eliminadas
     */
    public int delete() throws ConexionExcepcion, BaseDeDatosExcepcion{
        HashMap campos = new HashMap();
        campos.put(MConductor.campos[0], new Long(this.codConductor));
        String sentencia = TraductorSentencias.getDelete(MConductor.nombreEntidad, campos);
        return MediadorBD.realizarSentencia(sentencia);
    }
    
    /**
     * Crea un nuevo registro en base de datos
     * @return true: si se actualizó correctamente, false si ocurrió algun error
     */
    public boolean save() throws ConexionExcepcion, BaseDeDatosExcepcion{
        boolean retorno=false;
        HashMap campos = new HashMap();
        campos.put(MConductor.campos[0], new Long(this.codConductor));
        campos.put(MConductor.campos[1], this.cedula);
        campos.put(MConductor.campos[2], this.nombre);
        campos.put(MConductor.campos[3], this.apellido);
        campos.put(MConductor.campos[4], this.status);
        campos.put(MConductor.campos[5], this.numeroLicencia);
        campos.put(MConductor.campos[6], this.fechaVencimiento);
        String sentencia = TraductorSentencias.getInsert(MConductor.nombreEntidad, campos);
        MediadorBD.realizarSentencia(sentencia);
        retorno=true;
        return retorno;
    }
}
